package cn.lxh.blog.mapper;


import cn.lxh.blog.domain.Article;
import cn.lxh.blog.dto.ArticleDto;
import cn.lxh.blog.query.ArticleQuery;

import java.util.List;

/**
 * ArticleMapper是Article类的持久层
 */
public interface ArticleMapper {

    /**
     * 添加文章
     * @param article
     */
    void add(Article article);

    /**
     * 根据id删除文章
     * @param id
     */
    void delete(Long id);

    /**
     * 修改文章
     * @param article
     */
    void update(Article article);

    /**
     * 根据查询单个文章
     * @param id
     * @return
     */
    Article findOne(Long id);

    /**
     * 查询所有文章
     * @return
     */
    List<Article> findAll();

    /**
     * 根据id批量删除文章
     * @param ids
     */
    void patchDelete(Long[] ids);

    /**
     * 分页查询
     * @param articleQuery
     * @return
     */
    List<Article> queryPage(ArticleQuery articleQuery);

    /**
     * 查询文章类型的文章数量
     * @return
     */
    List<ArticleDto> countByArticleType();

    /**
     * 查询文章创建时间的文章数量
     * @return
     */
    List<ArticleDto> countByArticleCreateTime();

    /**
     * 查询相关文章
     * @param id
     * @return
     */
    List<Article> getRelatedArticles(Long id);

    /**
     * 根据文章类型id查询文章
     * @param id
     * @return
     */
    List<Article> getArticlesByTypeId(Long id);

    /**
     * 根据创建时间查询文章
     * @param articleCreateTime
     * @return
     */
    List<Article> getArticleByTime(String articleCreateTime);

    /**
     * 根据文章排行获取文章数据
     * @return
     */
    List<ArticleDto> articleRanking();

    /**
     * 获取文章数量最多的文章类型
     * @return
     */
    List<ArticleDto> articleTypeRanking();

    /**
     * 阅读量加1
     * @param articleId
     */
    void addPageView(Long articleId);

    /**
     * 点赞加1
     * @param articleId
     */
    void addLike(Long articleId);

    /**
     * 点赞减1
     * @param articleId
     */
    void loseLike(Long articleId);
}
